﻿using System.Web.Mvc;
using ContactManagement.Models;

namespace ContactMvc4TB.Helpers.CategoryManagement
{
    /// <summary>
    /// TODO Testen, ob nicht sogar einige Funktionen gleich sein können (z.b. edit) bei einigen Default Kategorien, da alle von der gleichen Basisklasse ableiten.
    /// Abstracte Basisklasse für das Arbeiten mit Kategorien.
    /// </summary>
    public abstract class CategoryBase
    {
        /// <summary>
        /// Der Aktuelle CurrentController, damit auch auf die Tempdaten und alles notwendige zugegriffen werden kann
        /// </summary>
        protected abstract Controller CurrentController { get; set; }

        /// <summary>
        /// Hinzufügen eines Eintrages zur Kategorie
        /// </summary>
        /// <param name="model"></param>
        /// <returns>TRUE->Erfolgreich angelegt | FALSE->Fehler beim Löschen</returns>
        public abstract bool Add(CategoriesAddModel model);

        /// <summary>
        /// Löschen der übergebenen Kategorie Id
        /// </summary>
        /// <param name="id">die Kategorie Id die gelöscht werden soll</param>
        /// <returns>TRUE->Erfolgreich gelöscht | FALSE->Fehler beim Löschen</returns>
        public abstract bool Delete(int id);

        /// <summary>
        /// Bearbeiten der übergebenen Kategorie Id
        /// </summary>
        /// <param name="id">Kategorie Id die bearbeitet werden soll</param>
        /// <returns>das passende Model mit den hinterlegten Daten aus der DB | Null bei einem Fehler</returns>
        public abstract CategoriesAddModel Edit(int id);

        /// <summary>
        /// Speichern der übergebenen Daten des geänderten Modells
        /// </summary>
        /// <param name="id">id die geändert werden soll</param>
        /// <param name="model">das Model mit den Daten die geändert werden sollen</param>
        /// <returns>TRUE->Änderung erfolgreich | FALSE->Daten konnten nicht geändert werden</returns>
        public abstract bool Edit(int id, CategoriesAddModel model);
    }
}